package sad.controle;

import sad.util.Constantes;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import sad.dao.ProfessorTableDAO;
import sad.modelo.Professor;
import sad.util.DAOEvent;
import sad.visao.CadProfessorDialog;
import sad.visao.DialogAbstrato;

public class ProfessorControle extends AbstractControl{

  private CadProfessorDialog v_prof;

  public ProfessorControle(DialogAbstrato v) {
    this.v_prof = (CadProfessorDialog) v;
    addOuvinte();
  }
  
// <editor-fold defaultstate="collapsed" desc="Responde a eventos com origem nas visões">
    @Override
    /* dependendo do actionCommand no obj CadProfessorDialog ele ira executar os
       metodos dentro do metodo actionPerformed abaixo*/
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals(Constantes.SALVAR_PROFESSOR)){
            createProfessor();
        }else {
            if(e.getActionCommand().equals(Constantes.EXCLUIR)){
                removeProfessor();
            }
            if(e.getActionCommand().equals(Constantes.UPDATE)){
                updateProfessor();
            }
            //remove esse controle como ouvinte do DAO
            ProfessorTableDAO.getInstance().removeDAOOuvinte(this);
            v_prof.close();
        }  
    }

    @Override
    public void windowClosing(WindowEvent e){
        switch(e.getID()){
           case WindowEvent.WINDOW_CLOSING:
                ProfessorTableDAO.getInstance().removeDAOOuvinte(this);
                v_prof.close();
                break;
        }
    }// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Enchaminha eventos com origem no DAO">
    @Override
    public void daoChange(DAOEvent e) {
           v_prof.modelDAOChange(e);
    }// </editor-fold>
    
// <editor-fold defaultstate="collapsed" desc="Métodos privados + CRUD">
    private void addOuvinte() {
        //add este controle como ouvinte da janela(v_prof) por isso parece
        //redundante na SADGUI, mas não é...
        v_prof.addActionListener(this);
        v_prof.addWindowOuvinte(this);
        ProfessorTableDAO.getInstance().addDAOOuvinte(this);
    }

    private void createProfessor() {
      String nome  = v_prof.getNome();
      String login = v_prof.getLogin();
      String senha = v_prof.getSenha();
      if(verificarOK(nome, login, senha, 0)) {
        ProfessorTableDAO.getInstance().create(nome, login, senha);
      }
    }

    private void removeProfessor() {
        ProfessorTableDAO.getInstance().removeProfessor();
    }

    private void updateProfessor() {
            String nome  = v_prof.getNome();
            String login = v_prof.getLogin();
            String senha = v_prof.getSenha();

            if(verificarOK(nome, login, senha, 1)){
                Professor p=ProfessorTableDAO.getProfessorSaved(login);
                p.setNome(nome);
                p.setSenha(senha);
                ProfessorTableDAO.getInstance().update(p);
            }
    }

    private boolean verificarOK(String nome, String login, String senha,  int tipo) {
            boolean ok=false;
            if (nome.equals("")){
                ProfessorTableDAO.getInstance().erroField(nome, Constantes.NOME_PROFESSOR);
            }else {
                if (login.equals("")){
                    ProfessorTableDAO.getInstance().erroField(login, Constantes.LOGIN_PROFESSOR);
                }else{
                      if (senha.equals("")){
                            ProfessorTableDAO.getInstance().erroField(senha, Constantes.SENHA_PROFESSOR);
                      }else{
                          if(tipo ==0){
                              if(!ProfessorTableDAO.getInstance().isExist(login)) {
                                ok=true;
                            }
                          }else{
                           ok=true;   
                          }
                    }  
                }
            }
            return ok;
    }// </editor-fold>
}
